import os
import cPickle as pickle

class Persion:
    '''
    Describe a nature persion, his/her name, sex, and 
    age.
    '''
    def __init__(self, info):
        '''Initializes the person's data'''
        self.name = info[0]
        self.sex = info[1]
        self.age = info[2]
        print '(Initializing %s)' % self.name

class Contact(Persion):
    '''
    Describe a Contact that is a nature persion, and
    has his/her Tel., Addr., and Email.
    '''
    def __init__(self, info):
        Persion.__init__(self, info)
        self.tel = info[3]
        self.addr = info[4]
        self.email = info[5]
        self.info = {self.name : (self.sex, self.age, self.tel, self.addr, self.email)}

    def tell(self):
        print self.info

def command_line_interface():
    prompt = 'wulei>>'
    workingDict = {}
    if os.path.exists(r'.\Contact.data'):
        workingDict = pickle.load(open(r'.\Contact.data', 'r'))
    else:
        pass

    while True:
        getInput = raw_input(prompt)
        if getInput == 'exit':
            pickle.dump(workingDict, open(r'.\Contact.data', 'w'))
            break
        elif getInput == 'add':
            newContact = generate_new_contact(get_info_from_raw_input())
            workingDict[newContact.name] = newContact.info[newContact.name]
            pass
        elif getInput == 'find':
            pattern = raw_input('Enter the name:')
            if pattern in workingDict:
                print '-'*45
                print 'Name: %s\nSex:  %s\nAge:  %s\nTel.:  %s\nAddr.:  %s\nEmail:%s' % (pattern, workingDict[pattern][0], workingDict[pattern][1], workingDict[pattern][2], workingDict[pattern][3], workingDict[pattern][4])
                print '-'*45
            else:
                print 'Sorry, but "%s" is not in your contacts list.' % pattern
        elif getInput == 'remove':
            pattern = raw_input('Enter the name:')
            if pattern in workingDict:
                workingDict.pop(pattern)
                print 'Contact "%s" has been removed.' % pattern
            else:
                print 'Sorry, but "%s" is not in your contacts list.' % pattern
        elif getInput == 'view':
            population == len(workingDict)
            if population == 1:
                print 'There is only one contact:'
            elif population == 0:
                print 'There is no contact.'
                continue
            else:
                print 'There are %d contacts:' % population
            for name, info in workingDict.items():
                print '-'*45
                print 'Name: %s\nSex:  %s\nAge:  %s\nTel.:  %s\nAddr.:  %s\nEmail:%s' % (name, info[0], info[1], info[2], info[3], info[4])
            pass
        elif getInput == 'help':
            print getInput
        else:
            exec(getInput)
            pass

def get_info_from_raw_input():
    info = []
    info.append(raw_input('Name:  '))
    info.append(raw_input('Sex:   '))
    info.append(raw_input('Age:   '))
    info.append(raw_input('Tel.:  '))
    info.append(raw_input('Addr.: '))
    info.append(raw_input('Email: '))
    return info

def generate_new_contact(info):
    return Contact(info)

if __name__ == '__main__':
    command_line_interface()
